{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 锂电池材料计算简介\n",
    "\n",
    "*Copyright (c) 2022 Institute for Quantum Computing, Baidu Inc. All Rights Reserved.*\n",
    "\n",
    "锂电池是一种高效、长寿命的电池，广泛用于各种消费类电子产品、工业设备和汽车动力系统中。锂电池的发展促进了电动汽车的普及，也为可再生能源储存提供了重要支撑。由于锂电池具有轻量、高能量密度和环保等优点，其应用前景广阔，且行业发展前景好。目前，锂电池行业正在经历快速发展，并不断创新和推广新技术。\n",
    "\n",
    "在锂电池中，能量主要通过电池正负极物质之间的电化学反应产生，\n",
    "$$\n",
    "LiC_6+CoO_2\\stackrel{放电}{\\underset{\\text{充电}}{\\rightleftarrows}}6C+LiCoO_2.\n",
    "$$\n",
    "\n",
    "根据热力学规律，这个能量等于放电反应前后正负极物质自由能\\[1\\]的变化量，在多数情况下，它可以通过反应前后物质的基态能量差进行估计\\[2\\]\n",
    "$$\n",
    "\\Delta G=G_{\\text{LiCoO}_2}+6G_{\\text{C}}-G_{\\text{CoO}_2}-G_{\\text{LiC}_6}.\n",
    "$$\n",
    "\n",
    "综上，由于化学反应的能量与反应方程式两侧分子/物质的能量有紧密联系，我们在衡量锂电池释放的总能量时就需要对相关分子/物质的基态能量有比较精确的估计。同时，反应中锂离子通过电解液在正负极之间迁移的过程也会涉及到离子在分子和材料表面的吸附，这会受到分子电极化情况的影响。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 利用量子计算化学方法计算分子基态性质\n",
    "### 构建分子哈密顿量\n",
    "分子哈密顿量由分子的几何结构和组成的原子决定，利用 `paddle_quantum` 的 `qchem` 模块，用户可以很方便地完成从分子的结构到哈密顿量的计算过程。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from paddle_quantum.qchem import Molecule, PySCFDriver\n",
    "\n",
    "mol = Molecule(\n",
    "    geometry = [(\"H\", [0.0, 0.0, 0.0]), (\"H\", [0.0, 0.0, 0.7])],\n",
    "    driver = PySCFDriver()\n",
    ")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由此，我们就新建了一个氢分子模型。在上面的代码中，`driver` 是用来计算哈密顿量中分子积分所使用的经典量子化学计算工具。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "converged SCF energy = -1.11734903499028\n",
      "-0.04207897647782183 I\n",
      "0.17771287465139923 Z0\n",
      "0.17771287465139923 Z1\n",
      "-0.24274280513140506 Z2\n",
      "-0.24274280513140506 Z3\n",
      "0.17059738328801052 Z0, Z1\n",
      "0.12293305056183806 Z0, Z2\n",
      "0.16768319457718972 Z0, Z3\n",
      "0.16768319457718972 Z1, Z2\n",
      "0.12293305056183806 Z1, Z3\n",
      "0.1762764080431961 Z2, Z3\n",
      "-0.044750144015351656 X0, X1, Y2, Y3\n",
      "0.044750144015351656 X0, Y1, Y2, X3\n",
      "0.044750144015351656 Y0, X1, X2, Y3\n",
      "-0.044750144015351656 Y0, Y1, X2, X3\n"
     ]
    }
   ],
   "source": [
    "h = mol.get_molecular_hamiltonian()\n",
    "print(h)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这样就构造了一个氢分子在 `STO-3G` 基组下的哈密顿量。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 搭建用于变分量子算法（VQE）的量子线路\n",
    "变分量子算法通过使用经典优化器对量子算法中的可调参数进行优化的方式完成经典-量子混合计算，相比于经典算法，它可以在某些情况下更快地求解具有高维特征的优化问题。接下来，我们按照\\[2\\]中给出的方法构建如下图所示的量子线路。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "converged SCF energy = -1.11734903499028\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 534x220 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from paddle_quantum.qchem import HardwareEfficient\n",
    "\n",
    "mol.build()\n",
    "cir = HardwareEfficient(mol.num_qubits, depth=2)\n",
    "cir.plot()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 计算氢分子势能面\n",
    "下面我们通过计算氢分子势能面的任务来展示一下 VQE 方法的使用。分子势能面刻画了分子的能量随着分子内部原子的空间位置变化的规律，它在物理和化学中有很广泛的应用，经常被用于寻找分子的最优几何结构以及计算化学反应速率。对于氢分子来说，因为内部只有一个空间自由度（两个氢原子之间的距离），它的势能面实际上是一条曲线。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "converged SCF energy = 2.71588739329275\n",
      "converged SCF energy = -0.593827758535727\n",
      "converged SCF energy = -1.04299627454009\n",
      "converged SCF energy = -1.11675930739643\n",
      "converged SCF energy = -1.09191404102006\n",
      "converged SCF energy = -1.06610864931794\n",
      "converged SCF energy = -0.910873554594387\n",
      "converged SCF energy = -0.783792654277353\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import paddle\n",
    "from paddle.optimizer import Adam\n",
    "from paddle_quantum.qchem import GroundStateSolver\n",
    "from paddle_quantum.qchem import dipole_moment\n",
    "\n",
    "paddle.seed(124)\n",
    "\n",
    "cir_depth = 2\n",
    "bond_lengthes = [0.1, 0.3, 0.5, 0.74, 0.9, 1.0, 1.5, 2.0]\n",
    "energies = []\n",
    "dipole_moments = []\n",
    "for bond_len in bond_lengthes:\n",
    "    mol = Molecule(\n",
    "        geometry = [(\"H\", [0.0, 0.0, 0.0]), (\"H\", [0.0, 0.0, bond_len])],\n",
    "        driver = PySCFDriver()\n",
    "    )\n",
    "    mol.build()\n",
    "    \n",
    "    cir = HardwareEfficient(mol.num_qubits, cir_depth)\n",
    "\n",
    "    solver = GroundStateSolver(Adam, num_iterations=100, tol=1e-5)\n",
    "    e, psi = solver.solve(mol, cir, learning_rate=0.5)\n",
    "    energies.append(e)\n",
    "\n",
    "    # calculate dipole moments\n",
    "    d = dipole_moment(psi, mol)\n",
    "    dipole_moments.append(np.linalg.norm(d))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们画出计算结果，可以看出氢分子的基态能量随着两个氢原子之间的距离增大先下降后上升，能量最低点对应的键长（也即平衡位置）为 0.74 埃。氢分子是一个非极性的分子，不管键长如何变化，它的偶极矩始终为零。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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fvlFo31Xq1YNW7duxfbt29GwYUMsX74c06dPB/Dyqz+5XI4JEyaozletWrXwww8/AABcXV0xZ84cBAUFwcnJCQEBAQUey9XVFXv37sXp06fh7e2NcePGYdSoUfjss8+0Oh/52bRpE9566y24u7u/9r6Iyjq2uWxz2eaWDRKRs7+bSI917doVzs7O+Pnnn0tk/x9//DESExOxcuXKEtl/TgsWLMCKFSvw4MGDEj9WccjIyEDNmjWxceNGtGnTRtfhEFEpYJurO2xzX+LNXqSXUlNTsWLFCvj4+MDAwACbNm3CoUOHcPDgwRI75vTp0/HDDz9AoVC89ldCuf3www9o3rw5KlWqhBMnTuCrr74q9FN+WXP//n18+umnFb5BJSqv2OaWLWxzX2KPLOml58+fo3fv3jh//jzS0tLg5eWFzz77DO+8846uQyuSjz76CJs3b0ZcXByqVq2K9957D9OmTYOhIT9rEpHusc2lsoqJLBERERHpJd7sRURERER6iYksEREREeklJrJEREREpJeYyBIRERGRXmIiS0RERER6iYksEREREeklJrJEREREpJeYyBIRERGRXmIiS0RERER66f8llUqVQXVHtgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 700x300 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig = plt.figure(figsize=(7, 3), )\n",
    "ax1 = fig.add_subplot(121)\n",
    "ax1.plot(bond_lengthes, energies)\n",
    "ax1.set_xlabel(\"Bond length (Angstrom)\")\n",
    "ax1.set_ylabel(\"Energy (Hartree)\")\n",
    "ax1.set_title(\"Potential energy curve\")\n",
    "\n",
    "ax2 = fig.add_subplot(122)\n",
    "ax2.plot(bond_lengthes, dipole_moments)\n",
    "ax2.set_xlabel(\"Bond length (Angstrom)\")\n",
    "ax2.set_ylabel(\"Dipole moment\")\n",
    "ax2.set_title(\"Dipole moment variation\")\n",
    "ax2.set_ylim(-0.5, 0.5)\n",
    "fig.tight_layout()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 如何使用\n",
    "用户可以通过编辑配置文件`config.toml`对计算任务进行自定义，其中用户需要设置的参数如下：\n",
    "```toml\n",
    "# A description of the task of this configuration file, this is optional. \"GroundState\" stands for calculate the ground state energy of the molecule.\n",
    "\n",
    "# This field stores information related to the molecule is provided.\n",
    "[molecule]\n",
    "# Symbols of atoms inside the molecule.\n",
    "symbols = ['H', 'H']\n",
    "# The cartesian coordinates of each atom inside the molecule.\n",
    "coords = [ [ 0.0, 0.0, 0.0 ], [ 0.0, 0.0, 0.7 ] ]\n",
    "\n",
    "# This field specifies configurations related to the quantum circuit in VQE is specified.\n",
    "[ansatz.HardwareEfficient]\n",
    "# The depth of the HardwareEfficient ansatz.\n",
    "depth = 2\n",
    "\n",
    "# This field stores configurations of the variational quantum eigensolver (VQE) method. \n",
    "[VQE]\n",
    "# Number of optimization cycles, default is 100.\n",
    "num_iterations = 100\n",
    "```\n",
    "用户可以通过在命令行中运行\n",
    "```shell\n",
    "python energy_material.py --config example.toml\n",
    "```\n",
    "的方式来完成量子化学计算任务。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参考文献\n",
    "\\[1\\] [百度百科-自由能](https://baike.baidu.com/item/%E8%87%AA%E7%94%B1%E8%83%BD/813477?fr=aladdin)\n",
    "\n",
    "\\[2\\] Aydinol, M. K., et al. \"Ab initio study of lithium intercalation in metal oxides and metal dichalcogenides.\" Physical Review B 56.3 (1997): 1354.\n",
    "\n",
    "\\[3\\] Kandala, Abhinav, et al. \"Hardware-efficient variational quantum eigensolver for small molecules and quantum magnets.\" Nature 549.7671 (2017): 242-246."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pq-dev",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.15 (default, Nov 10 2022, 13:17:42) \n[Clang 14.0.6 ]"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "5fea01cac43c34394d065c23bb8c1e536fdb97a765a18633fd0c4eb359001810"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
